package com.torry.edss.domain.service;


import com.torry.edss.domain.model.Company;

public interface PickingConditionService {

    /**
     * 判断公司是否为主板上市公司。
     *
     * @param company 公司对象
     * @return 如果公司是主板上市公司，则返回 true；否则返回 false
     */
    boolean 属于主板且非ST(Company company);

    /**
     * 判断某公司某日的成交量是否放量或平量。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果成交量放量或平量，则返回 true；否则返回 false
     */
    boolean 当日放量或平量(Long companyId, String date);

    /**
     * 判断某公司某日的成交量是否缩量。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果成交量缩量，则返回 true；否则返回 false
     */
    boolean 当日缩量(Long companyId, String date);


    /**
     * 判断某公司某日的成交量是否小于前一日成交量的指定倍数。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @param multiple  倍数
     * @return 如果成交量小于前一日成交量的指定倍数，则返回 true；否则返回 false
     */
    boolean 当日量能小于前一日指定倍数(Long companyId, String date, Double multiple);

    /**
     * 判断某公司某日的次日成交量是否小于当日成交量的指定倍数。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @param multiple  倍数
     * @return 如果次日成交量小于当日成交量的指定倍数，则返回 true；否则返回 false
     */
    boolean 次日量能小于当日的指定倍数(Long companyId, String date, Double multiple);

    /**
     * 判断某公司在涨停后到指定日期之间是否没有再次涨停。
     *
     * @param companyId 公司 ID
     * @param limitDate 涨停日期
     * @param endDate   结束日期
     * @return 如果没有再次涨停，则返回 true；否则返回 false
     */
    boolean 涨停后到指定日期之间没有再次涨停(Long companyId, String limitDate, String endDate);


    /**
     * 判断某公司某日是否低开。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果低开，则返回 true；否则返回 false
     */
    boolean 当日低开(Long companyId, String date);

    /**
     * 判断某公司某日是否跳空低开。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果跳空低开，则返回 true；否则返回 false
     */
    boolean 当日跳空低开(Long companyId, String date);

    /**
     * 判断某公司某日是否高开。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果高开，则返回 true；否则返回 false
     */
    boolean 当日高开(Long companyId, String date);

    /**
     * 判断某公司某日是否跳空高开。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果跳空高开，则返回 true；否则返回 false
     */
    boolean 当日跳空高开(Long companyId, String date);

    /**
     * 判断某公司某日的前一日是否收阴线或平盘。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果前一日收阴或平盘，则返回 true；否则返回 false
     */
    boolean 指定日期前一日涨幅小于等于0(Long companyId, String date);

    /**
     * 判断某公司某日的涨跌幅是否大于或等于指定值。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @param zdf       涨跌幅阈值
     * @return 如果涨跌幅大于或等于指定值，则返回 true；否则返回 false
     */
    boolean 涨跌幅大于等于指定值(Long companyId, String date, double zdf);

    /**
     * 判断某公司某日的涨跌幅是否大于指定值。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @param zdf       涨跌幅阈值
     * @return 如果涨跌幅大于指定值，则返回 true；否则返回 false
     */
    boolean 涨跌幅大于指定值(Long companyId, String date, double zdf);

    /**
     * 判断某公司某日是否跌破涨停板保护位。
     *
     * @param limitUpId 涨停板 ID
     * @param date      日期
     * @return 如果跌破涨停板保护位，则返回 true；否则返回 false
     */
    boolean 跌破涨停板保护位(Long limitUpId, String date);

    /**
     * 判断某公司某日是否是一字板（涨停或跌停）。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果是一字板，则返回 true；否则返回 false
     */
    boolean 是一字板(Long companyId, String date);

    /**
     * 判断某公司某日K线是否没有上影线。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果没有上影线，则返回 true；否则返回 false
     */
    boolean 当日没有上影线(Long companyId, String date);

    /**
     * 判断某公司某日K线是否没有下影线。
     *
     * @param companyId 公司 ID
     * @param date      日期
     * @return 如果没有下影线，则返回 true；否则返回 false
     */
    boolean 当日没有下影线(Long companyId, String date);

    /**
     * 判断某公司某日的 K 线实体部分高度是否大于指定百分比。
     *
     * @param companyId      公司 ID
     * @param date           日期
     * @param diffPercentage 百分比阈值
     * @return 如果实体高度大于指定百分比，则返回 true；否则返回 false
     */
    boolean K线实体部分大于指定值(Long companyId, String date, double diffPercentage);

    /**
     * 判断某公司某日的上下影线长度的差值 是否大于或等于指定百分比。
     *
     * @param companyId      公司 ID
     * @param date           日期
     * @param diffPercentage 百分比阈值
     * @return 如果上下影线长度的差值 大于或等于指定百分比，则返回 true；否则返回 false
     */
    boolean 上下影线差值大于等于指定值(Long companyId, String date, double diffPercentage);

    /**
     * 判断某公司在涨停后到指定日期之间，除第一天调整外，其余时间阴线是否缩量。
     *
     * @param companyId 公司 ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 如果除第一天调整外，其余时间阴线缩量，则返回 true；否则返回 false
     */
    boolean 涨停后除首阴外调整期间阴线缩量(Long companyId, String startDate, String endDate);

    boolean isRealTime(String date);
}
